package com.example.springflowable.service;

import com.example.springflowable.model.TaskModel;
import org.flowable.bpmn.model.FlowElement;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;
import org.flowable.task.api.history.HistoricTaskInstance;

import java.util.List;
import java.util.Map;

/**
 * @Classname TaskCommonService
 * @Description TODO
 * @Date 2022/5/6 16:13
 * @Created by XiongXiong
 * @Author: X.I.O
 */
public interface TaskCommonService {

    /**
     * 添加审核意见
     * @param taskId  任务id
     * @param message  审批消息
     */
    public void addCheckMessage(String taskId,String message);
    /**
     * 启动流程
     * @param processdefId 流程版本id
     * @param businessId   业务数据id
     * @param title        标题
     * @param map          节点数据
     * @return
     */
    public ProcessInstance startProcess(String processdefId, String businessId, String title,String uid,Map<String,Object> map);
    /**
     * 删除部署的流程
     * @param deploymentId
     */
    public void deleteDeployment(String deploymentId);

    /**
     * 激活流程
     * @param processInstanceId
     */
    public void activateProcessInstanceById(String processInstanceId);

    /**
     * 挂起流程
     * @param processInstanceId 流程id
     */
    public void  suspendProcessInstanceById(String processInstanceId);

    /**
     * 获取所有的流程实例
     * @return
     */
    public List<ProcessInstance> getProcessInstanceList();

    /**
     * 获取用户的历史任务
     * @param uid 用户id
     * @return 历史任务
     */
    public  List<HistoricTaskInstance> getHistoricTaskInstanceListByUid(String uid);

    /**
     * 通过任务id获取流程实例
     * @param taskId 任务id
     * @return 流程实例
     */
    public ProcessInstance getProcessInstanceByTaskId(String taskId);

    /**
     * 通过流程实例id获取流程实例
     * @param processInstanceId
     * @return
     */
    public ProcessInstance getProcessInstanceById(String processInstanceId);

    /**
     * 通过流程id获取任务
     * @param processInstanceId 流程id
     * @return
     */
    public Task getTaskByProcessInstanceId(String processInstanceId);

    /**
     * 获取我的待办
     * @return 我的待办
     */
    List<TaskModel> getMyTaskList(String userid, Integer page, Integer size);

    /**
     *
     * @param taskId   任务id
     * @param formUid  来自谁
     * @param toUid    发给谁
     * @param msg      审核信息
     * @param map      流程信息
     */
    void complete(String taskId,String formUid,String toUid,String msg,Map<String,Object> map);

    /**
     * 任务提交到下一节点
     * @param processInstanceId 流程id
     * @param toUid             发给谁
     * @param msg               审核信息
     * @param map               其他信息
     */
    void complete(String processInstanceId,String toUid,String msg,Map<String,Object> map);

    /**
     *
     * @return
     */
    List<TaskModel> getMyHistoryTaskList(String uid,Integer page,Integer size);

    /**
     * 获取任务历史记录 通过流程id
     * @param processInstanceId 流程id
     * @return
     */
    List<TaskModel> getHistoryTaskListByProcessInstanceId(String processInstanceId);

    /**
     * 根据任务id获取节点
     * @param processInstId
     * @return
     */
    List<HistoricTaskInstance> getHistoricTaskListByProcessInstanceId(String processInstId);

    /**
     * 通过流程id获取任务列表
     * @param processInstanceId
     * @return
     */
    List<Task> getTaskListByProcessInstanceId(String processInstanceId);

    /**
     * 通过流程id获取任务模型
     * @param processInstanceId
     * @return
     */
    List<TaskModel> getTaskModelListByProcessInstanceId(String processInstanceId);

    /**
     * 处理网关
     * @param flowElement
     * @param data
     */
    void dealGetWay(FlowElement flowElement, Map data);

}
